SpringBoot设置文件虚拟路径映射 | 您所在的位置:网站首页 › SpringMVC映射本地文件 › SpringBoot设置文件虚拟路径映射 |
前言
我们在写SpringBoot项目的时候,很大几率会遇到文件上传与下载功能。 我们一般访问服务器的资源都是resources下的公开资源,配置文件中一般会指定到类路径下的static文件夹下:spring.resources.static-locations=classpath:/static/,或者说不配置默认指定在类路径下:classpath:/,例如: # 应用服务 WEB 访问端口 server.port=8080 # 项目资源路径:必须加static作为前缀才能访问 默认为/** spring.mvc.static-path-pattern=/static/** # 将项目资源路径映射到系统资源路径下 spring.resources.static-locations=classpath:/ #效果等同于不配置但是我们可能会把一些项目的文件放在其他服务器或者硬盘中,这样可以更好的存储和管理系统的文件,那么我们应该如何通过项目的路径来访问这些文件呢? 只需要我们给SpringBoot中配置一个虚拟路径,将硬盘的路径映射到项目路径下,这样就可以通过项目路径来访问硬盘中的资源了。 本文将讲解2种方法 配置application.properties/yml自定义配置类实现WebMvcConfigurer接口 准备系统资源路径为了演示效果,我会在本地系统路径中存放一张图片: 系统路径:H:\AFile\1.jpg 我们来访问一下系统资源下的一张小姐姐图片,访问的时候需要加上前缀file:然后加上绝对路径H:\AFile\1.jpg就可以访问到小姐姐这张图片,浏览器会在file:后面加上///,你只需要以前缀file:加上绝对路径即可无需写成file:,交给浏览器来做。 配置SpringBoot虚拟路径的映射定义application文件 # 应用服务 WEB 访问端口 server.port=8080 # 项目静态资源路径,可以不写默认为/** # spring.mvc.static-path-pattern=/** # 将项静态目资源路径映射到系统资源路径下 spring.resources.static-locations=file:H:\\AFile项目资源路径不写默认为/**,意味着你在localhost:8080/下能直接访问静态资源,而静态资源映射在系统资源H:\AFile\文件夹下,你所访问项目静态资源路径都和系统本地资源路径一一对应。 Tips: spring.resources.static-locations可以指定多个资源路径,用,隔开 spring.resources.static-locations=file:G:\\AFile,file:H:\\AFile如果访问多个路径中存在相同名称的资源,会采取就近原则,将静态资源路径从左往右寻找最近的一个资源返回给浏览器。 资源路径访问项目静态资源:http://localhost:8080/1.jpg 对应的系统本地静态资源:H:\AFile\1.jpg 说白了就是项目路径http://localhost:8080/后面的资源名称会对应在系统本地路径H:\AFile\的后面 路径规则: 本地绝对路径替换掉本地静态资源路径为项目静态资源路径 H:\AFile\1.jpg替换掉H:\AFile\为localhost:8080/等于http://localhost:8080/1.jpg 验证光说没用,下面来验证一下上面的说法: 浏览器访问http://localhost:8080/1.jpg看看效果: 我们访问的一直是H:\AFile下的资源文件,那如果我新建文件夹然后在里面放上文件会怎么样呢? 在H:\AFile下新建一个A文件夹,里面放上一张2.jpg图片 我们套用路径规则来访问一下: 本地绝对路径替换掉本地静态资源路径为项目静态资源路径 H:\AFile\A\2.jpg替换掉H:\AFile\为http://localhost:8080/等于http://localhost:8080/A/2.jpg 注意:本地路径的斜杠\需要换成项目路径的斜杠/ 浏览器访问http://localhost:8080/A/2.jpg: 使用配置类新建一个Java类名称自定义,加上注解@Configuration就是一个配置类,实现WebMvcConfigurer接口并重写addResourceHandlers()方法: @Configuration public class MvcConfig implements WebMvcConfigurer { //设置文件虚拟路径映射 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/test/**").addResourceLocations("file:H:\\AFile\\"); } } addResourceHandler:添加一个资源处理程序,用于根据指定的 URL 路径模式提供静态资源。 将为与指定路径模式之一匹配的每个传入请求调用处理程序。addResourceLocations:添加一个或多个用于提供静态内容的资源位置。 每个位置都必须指向一个有效的目录。 可以将多个位置指定为逗号分隔的列表,并且将按照指定的顺序检查给定资源的位置。白话文解释 addResourceHandlers:添加项目静态资源路径addResourceLocations:将项目静态资源映射到本地指定的资源路径 registry.addResourceHandler("/test/**").addResourceLocations("file:H:\\AFile\\");连起来说白了就是localhost:8080/test/该路径下访问的静态资源对应着本地H:\AFile\目录下的资源文件。 演示将之前的配置全部注释掉: 例如我要访问这张小姐姐图片 这里依然可以套用路径规则 本地绝对路径替换掉本地静态资源路径为项目静态资源路径 H:\AFile\1.jpg替换掉H:\AFile\为localhost:8080/test/等于localhost:8080/test/1.jpg 浏览器访问localhost:8080/test/1.jpg: 访问H:\AFile\A\下的2.jpg H:\AFile\A\2.jpg替换掉H:\AFile\为localhost:8080/test/等于localhost:8080/test/A/2.jpg 浏览器访问localhost:8080/test/A/2.jpg: SpringBoot设置文件虚拟路径映射教程结束!!! |
CopyRight 2018-2019 实验室设备网 版权所有 |